import axios from 'axios'
// create an axios instance
const service = axios.create({
    // baseURL: process.env.BASE_API, // api的base_url
    timeout: 100000 // request timeout
})

// request拦截器
service.interceptors.request.use(config => {
    return config
}, error => {
    // Do something with request error
    console.log(error) // for debug
    Promise.reject(error)
})

// respone拦截器
service.interceptors.response.use(
    response => {
        /**
         * 下面的注释为通过response自定义code来标示请求状态，当code返回如下情况为权限有问题，登出并返回到登录页
         * 如通过xmlhttprequest 状态码标识 逻辑可写在下面error中
         */
        const res = response.data
            // if (response.status === 401 || res.status === 40101) {
            //   MessageBox.confirm('你已被登出，可以取消继续留在该页面，或者重新登录', '确定登出', {
            //     confirmButtonText: '重新登录',
            //     cancelButtonText: '取消',
            //     type: 'warning'
            //   }).then(() => {
            //     store.dispatch('LogOut').then(() => {
            //       location.reload() // 为了重新实例化vue-router对象 避免bug
            //     })
            //   })
            //   return Promise.reject('error')
            // }
            // if (res.status === 30101) {
            //   Message({
            //     message: res.message,
            //     type: 'error',
            //     duration: 5 * 1000
            //   })
            //   return Promise.reject('error')
            // }
            // if (res.status === 40301) {
            //   Message({
            //     message: '当前用户无相关操作权限！',
            //     type: 'error',
            //     duration: 5 * 1000
            //   })
            //   return Promise.reject('error')
            // }
        if (response.status !== 200 && res.status !== 200) {
            Message({
                message: res.message,
                type: 'error',
                duration: 5 * 1000
            })
        } else {
            return response.data
        }
    },
    error => {
        console.log('err' + error) // for debug
        const response = error.response
        if (response === undefined) {
            Message({
                message: '服务请求超时！',
                type: 'error',
                duration: 5 * 1000
            })
            return Promise.reject(error)
        }
        if (response.status === 400) {
            Message({
                message: '账户或密码错误！',
                type: 'warning'
            })
            return Promise.reject('error')
        }
        const info = response.data
        if (response.status === 401 || info.status === 40101) {
            MessageBox.confirm('你已被登出，可以取消继续留在该页面，或者重新登录', '确定登出', {
                confirmButtonText: '重新登录',
                // cancelButtonText: '取消',
                type: 'warning'
            }).then(() => {
                store.dispatch('LogOut').then(() => {
                    location.reload() // 为了重新实例化vue-router对象 避免bug
                })
            })
        }
        if (response.status === 403) {
            Notification.warning({
                title: '禁止',
                message: info.message,
                type: 'error',
                duration: 2 * 1000
            })
            return Promise.reject('error')
        }
        if (info.status === 30101) {
            Notification.warning({
                title: '失败',
                message: info.message,
                type: 'error',
                duration: 2 * 1000
            })
            return Promise.reject('error')
        }
        if (response.status === 504) {
            Message({
                message: '后端服务异常，请联系管理员！',
                type: 'error',
                duration: 5 * 1000
            })
            return Promise.reject(error)
        }
        //生产环境需要注释掉TODO
        // if (response.status === 501) {
        //     Message({
        //         message: response.data.err,
        //         type: 'error',
        //         duration: 5 * 1000
        //     })
        //     return Promise.reject(error)
        // }
        // Message({
        //     message: info.message,
        //     type: 'error',
        //     duration: 5 * 1000
        // })
        return Promise.reject(error)
    }
)

export default service
